/*************************************************************************
	> File Name: proc.cpp
	> Author: 
	> Mail: 
	> Created Time: Sat Aug  2 21:58:51 2025
 ************************************************************************/

#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
#include <cstring>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
using namespace std;

//// 定义函数指针类型
//typedef void (*func_t)();
//
//// 定义回调函数数组
//#define NUM 5
//func_t handlers[NUM+1];
//
//// 回调函数声明
//void Download();
//void Flush();
//void Log();
//
//// registerHandler 函数声明
//void registerHandler(func_t h[], func_t f);
//
//// 回调函数实现
//void Download()
//{
//    printf("正在下载......\n");
//}
//
//void Flush()
//{
//    printf("正在刷新......\n");
//}
//
//void Log()
//{
//    printf("正在记录日志......\n");
//}
//
//// registerHandler 函数实现
//void registerHandler(func_t h[], func_t f)
//{
//    int i = 0;
//    for(;i < NUM; ++i)
//    {
//        if(h[i] == NULL)
//        {
//            break;
//        }
//    }
//    if(i == NUM)
//    {
//        return;
//    }
//    h[i] = f;
//    h[i + 1] = NULL;
//}
//
//int main()
//{
//    // 注册回调函数
//    registerHandler(handlers, Download);
//    registerHandler(handlers, Flush);
//    registerHandler(handlers, Log);
//
//    // 创建子进程
//    pid_t id = fork();
//    if(id == -1)
//    {
//        // 创建失败
//        perror("fork failed");
//        return 1;
//    }
//    else if(id == 0)
//    {
//        // 子进程
//        int cnt = 3;
//        while(cnt--)
//        {
//            sleep(3);
//            printf("我是一个子进程，我的pid: %d, ppid: %d\n", getpid(), getppid());
//        }
//        return 0;
//    }
//    else
//    {
//        // 父进程
//        while(1)
//        {
//            int status = 0;
//            pid_t rid = waitpid(id, &status, WNOHANG);
//            if(rid > 0)
//            {
//                printf("等待成功，rid: %d, exit_code: %d, exit_signal: %d\n", rid, WEXITSTATUS(status), status & 0x7F);
//                break;
//            }
//            else if(rid == 0)
//            {
//                // 调用所有注册的回调函数
//                int i = 0;
//                for(; handlers[i]; ++i)
//                {
//                    handlers[i]();
//                }
//                printf("*********************************************\n");
//                sleep(1);
//            }
//            else
//            {
//                printf("等待错误!errno: %d, error: %s\n", errno, strerror(errno));
//                break;
//            }
//        }
//    }
//    return 0;
//}
//

int main()
{
    printf("我的程序要执行了...\n");
    execl("/usr/bin/ls","ls","-a","-l",NULL);
    printf("我的程序运行完毕了!\n");
    return 0;
}
